package com.zhaolulu.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhaolulu.domain.Policy;
import com.zhaolulu.domain.Sku;
import com.zhaolulu.domain.VendingMachine;
import com.zhaolulu.domain.vo.SkuVo;
import com.zhaolulu.mapper.SkuMapper;
import com.zhaolulu.service.PolicyService;
import com.zhaolulu.service.SkuService;
import com.zhaolulu.service.VendingMachineService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements SkuService {

    @Autowired
    private PolicyService policyService;
    @Autowired
    private VendingMachineService vendingMachineService;

    /**
     * 根据设备编号查找SKU列表，并根据对应的策略计算实际价格。
     *
     * @param innerCode 设备编号，用于查询SKU和对应的自动售货机。
     * @return SKU列表，包含每个SKU的实际价格和是否打折的信息。
     */
    public List<SkuVo> findSkuByInnerCode(String innerCode) {
        // 根据设备编号查询商品列表
        List<SkuVo> skuVOList = baseMapper.findSkuByInnerCode(innerCode);
        // 根据设备编号查询对应的售货机
        VendingMachine vm = vendingMachineService.getVendingMachineByInnerCode(innerCode);
        // 获取自动售货机对应的策略
        Policy policy = policyService.getById(vm.getPolicyId());
        // 初始化折扣率为100%，即无折扣
        int discount = 100;
        // 如果策略存在，则使用策略中的折扣率
        if (policy != null) {
            discount = policy.getDiscount();
        }
        // 遍历SKU列表，计算每个SKU的实际价格，并设置是否打折的标记
        for (SkuVo skuVO : skuVOList) {
            // 计算SKU的实际价格，折扣率以百分比形式表示
            skuVO.setRealPrice(skuVO.getPrice() * discount / 100);
            // 如果实际价格小于原价格，则标记为打折；否则标记为不打折
            if (skuVO.getRealPrice() < skuVO.getPrice()) {
                skuVO.setDiscount(true);
            } else {
                skuVO.setDiscount(false);
            }
        }
        // 返回计算过实际价格和打折标记的SKU列表
        return skuVOList;
    }


}
